# coding: utf-8
'''
@autor1: João Batista nº5479
@autor2: Luis Cabaço nº5606
@data Inicio: 16/11/2012 - 18:11
@data Fim: 3/12/2012 - 11.35
@obs:

'''

class Estatisticas():
	'''
	classe que faz as estatisticas
	'''
	def dicionario(self):
		'''
			Dicionario necessario à realizão das estatisticas

			Returns:
				Devolve o dicionario com os anos da estatistica
		'''

		dic_anos = {7:'95/96', 10:'96/97', 13:'97/98', 16:'98/99',
					19:'99/00', 22:'00/01', 25:'01/02', 28:'02/03',
					31:'03/04', 34:'04/05', 37:'05/06', 40:'06/07',
					43:'07/08', 46:'08/09', 49:'09/10', 52:'10/11'
					}

		return dic_anos

	def primeira_estatistica(self, bd):
		'''
			Computadores e informática, estabelecimento de ensino,
			unidade organica e anos em que funcionam

			Args:
				bd: lista com o conteudo da base de dados

			Returns:
				Devolve uma lista com os resultados da estatistica 1
		'''

		dic_anos = self.dicionario()
		estatistica_1 = []	

		# cada linha do ficheiro
		for linha in bd:
			
			# filtro para para os cursos de Informática e Computadores
			if "computadores" in linha[3].encode("utf-8").lower() or "informática" in linha[3].encode("utf-8").lower():

				linha_estatistica_1 = [linha[0].encode("utf-8"), linha[1].encode("utf-8"), linha[3].encode("utf-8")] 

				# percorrer todos os anos
				for x in xrange(7, 53, 3):
					if linha[x] > 0:
						linha_estatistica_1.append(dic_anos[x].encode("utf-8"))
						pass
					pass

				estatistica_1.append(linha_estatistica_1)
				del linha_estatistica_1
				pass
			pass

		return estatistica_1
	

	def segunda_estatistica(self, bd):
		'''
			quantidade de alunos que se inscreveram nos cursos anteriores

			Args:
				bd: lista com o conteudo da base de dados

			Returns:
				Devolve um dicionario com o resultado da estatistica dois
		'''

		dic_curso = {}
		dic_anos_global = self.dicionario()	

		# cada linha do ficheiro
		for linha in bd:
			# filtro para para os cursos de Informática e Computadores
			if "computadores" in linha[3].encode("utf-8").lower() or "informática" in linha[3].encode("utf-8").lower():

				#percorre o dicionário dos anos
				for ano in xrange(7, 53, 3):
					chave = linha[3]

					# se o curso existir adiciciona o total de alunos ao dicionário do ano
					if chave in dic_curso:
						total_ano = dic_curso[chave][ano]
						total_ano += linha[ano]
						dic_curso[chave][ano] = total_ano
						pass

					#se não existir cria uma nova entrada
					else:
						dic_anos_local = {7:0, 10:0, 13:0, 16:0,
											19:0, 22:0, 25:0, 28:0,
											31:0, 34:0, 37:0, 40:0,
											43:0, 46:0, 49:0, 52:0}
											  
						dic_anos_local[ano] = linha[ano]
						dic_curso[chave] = dic_anos_local
						pass
					pass
				pass
			pass
		
		return dic_curso
	

	def terceira_quarta_estatistica(self, bd):
		'''
			quantidade de cursos/alunos por nivel de formação

			Args:
				bd: lista com o conteudo da base de dados

			Returns:
				Devolve um dicionario com o resultado da estatistica três e quatro
		'''
		
		dic_nivel = {}
		dic_anos_global = self.dicionario()
		
		for linha in bd:
			
			#filtra cursos de informática
			if "computadores" in linha[3].encode("utf-8").lower() or "informática" in linha[3].encode("utf-8").lower():
				
				for ano in xrange(7, 53, 3):
					
					if linha[ano] > 0:
						
						# se chave existir
						if linha[2] in dic_nivel:
							dic_nivel[linha[2]][ano].append(linha[ano])
							pass
							
						# se chave não existe
						else:
							dic_anos_local = {7:[], 10:[], 13:[], 16:[],
											  19:[], 22:[], 25:[], 28:[],
											  31:[], 34:[], 37:[], 40:[],
											  43:[], 46:[], 49:[], 52:[]}
											  
							dic_anos_local[ano].append(linha[ano])
							dic_nivel[linha[2]] = dic_anos_local
							pass
									
		return dic_nivel